package com.free.utils;

import com.free.exception.SystemException;
import com.sun.javafx.binding.StringFormatter;
import org.apache.commons.lang3.StringUtils;

import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;

/**
 * <p>
 * 功能概述:
 * </p>
 * <p>
 * 功能详述:
 * </p>
 */
public class PropertiesResourceUtils {
    /*========================================================================*
     *                         Public Fields (公共属性)
     *========================================================================*/

    /*========================================================================*
     *                         Private Fields (私有属性)
     *========================================================================*/

    /*========================================================================*
     *                         Construct Methods (构造方法)
     *========================================================================*/

    /*========================================================================*
     *                         Public Methods (公有方法)
     *========================================================================*/

    /**
     * 导入properties文件
     * @param fileNm
     * @return
     * @throws SystemException
     */
    public static Properties load(String fileNm) throws SystemException {
        InputStream stream = Thread.currentThread().getContextClassLoader().getResourceAsStream(fileNm);
        Properties properties = new Properties();
        try {
            properties.load(stream);
        } catch (IOException e) {
            String excepMsg = String.format("PropertiesUtils 处理文件：[%s]时发生异常", fileNm);
            throw new SystemException(excepMsg, e);
        }
        return properties;
    }

    /**
     * 获得特定的属性的值
     * @param properties
     * @param key
     * @param <T>
     * @return
     */
    public static <T> T getPropertyValue(Properties properties, String key)
    {
        if(properties != null)
        {
            if(properties.containsKey(key))
            {
                return (T)properties.get(key);
            }
        }
        return null;
    }

    /**
     * 获得属性集合
     * @param properties
     * @return
     */
    public static Map<String,Object> readToMap(Properties properties)
    {
        Map<String,Object> res = new HashMap<>();
        properties.keySet().forEach(x->{
            String key = x.toString();
            res.put(key, properties.getProperty(key));
        });
        return res;
    }

    /*========================================================================*
     *                         Private Methods (私有方法)
     *========================================================================*/
}
